001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Dec 1, 2002
005     * Time: 2:09:10 AM
006     */
007    
008    package EVolve.util.painters;
009    
010    import EVolve.visualization.AutoImage;
011    import EVolve.visualization.Predictor;
012    
013    public class MissRatePainter extends PredictionPainter{
014        private long predictCounter, hitCounter, lastX;
015        private float maxMiss = 0;
016    
017        public MissRatePainter(Predictor[] predictor,int targetType) {
018            super(predictor,targetType);
019            predictCounter = 0;
020            hitCounter = 0;
021            lastX = 0;
022            maxMiss = 0;
023        }
024    
025        public String getName() {
026            return "Miss Prediction Metric Painter";
027        }
028    
029        public void paint(AutoImage image, long x, long y, long z) {
030            predictor[(int)y].newTarget2(z);
031    
032            if (x>=miss.length) {
033                int [] newmetrics = new int[miss.length+200];
034                for (int i =0; i< newmetrics.length; i++)
035                    if (i<miss.length)
036                        newmetrics[i] = miss[i];
037                    else newmetrics[i] = 0;
038                miss = newmetrics;
039            }
040    
041            if (x != lastX) {
042                if (predictCounter != 0)
043                    miss[(int)lastX] = (int)(300*(predictCounter - hitCounter)/predictCounter);
044                if (maxMiss < (float)miss[(int)lastX]/300) {
045                    maxMiss = (float)miss[(int)lastX]/300;
046                }
047                for (int i = (int)lastX; i<x; i++)
048                {
049                    miss[i] = miss[(int)lastX];
050                    if (miss[(int)lastX] != 0)
051                        image.setColor(i,miss[(int)lastX],colorRed);
052                }
053                lastX = x;
054            }
055            if (validateTarget(y,z)) {
056                predictCounter++;
057                if (predictor[(int)y].isCorrect()) {
058                    hitCounter ++;
059                }
060            }
061        }
062    
063        public float getMaxMiss() {
064            return maxMiss;
065        }
066    
067        public float getMissrate(int X) {
068            return ((float)miss[X])/3;
069        }
070    }